package cn.tpshion.config.controller;

import cn.tpshion.config.common.R;
import cn.tpshion.config.domain.dto.AddNameDTO;
import cn.tpshion.config.domain.dto.ConfigInfoDTO;
import cn.tpshion.config.domain.entity.ConfigInfo;
import cn.tpshion.config.domain.entity.ConfigNameInfo;
import cn.tpshion.config.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/config")
public class ConfigController {

    @Autowired
    private ConfigService configService;

    /**
     * 查询所有配置
     * @return
     */
    @GetMapping("/getAllConfig")
    public R<List<ConfigInfo>> getAllConfig(){
        List<ConfigInfo> allConfig = configService.getAllConfig();
        return R.success(allConfig,"查询配置成功");
    }

    /**
     * 根据域名称查询配置列表
     * @param name
     * @return
     */
    @GetMapping("/getConfigByName")
    public R<List<ConfigInfo>> getConfigByName(String name){
        return R.success(configService.getConfigByName(name),"查询配置成功");
    }

    /**
     * 查询某项配置域的配置项
     * @param name 配置域
     * @param key 配置项
     * @return
     */
    @GetMapping("/getConfigByKey")
    public R<List<ConfigInfo>> getConfigByKey(String name, String key){
        return R.success(configService.getConfigByKey(name,key),"查询配置成功");
    }

    /**
     * 模糊查询所有配置
     * @param name
     * @param key
     * @return
     */
    @GetMapping("/queryConfig")
    public R<List<ConfigInfo>> queryConfig(String name, String key){
        return R.success(configService.queryConfig(name,key),"查询成功");
    }

    /**
     * 修改配置
     * @param dto 修改参数
     * @return
     */
    @PostMapping("/updateConfig")
    public R<ConfigInfo> updateConfig(@Validated @RequestBody ConfigInfoDTO dto){
        ConfigInfo configInfo = configService.updateConfig(dto.getName(), dto.getKey(), dto.getValue());
        return R.success(configInfo,"修改配置成功");
    }

    /**
     * 删除配置项
     * @param name 配置域
     * @param key 配置项
     * @return
     */
    @DeleteMapping("/deleteConfig")
    public R deleteConfig(String name, String key){
        configService.deleteConfig(name,key);
        return R.ok("删除配置成功");
    }

    /**
     * 添加配置
     * @param dto 配置参数
     * @return
     */
    @PostMapping("/addConfig")
    public R<ConfigInfo> addConfig(@Validated @RequestBody ConfigInfoDTO dto){
        ConfigInfo configInfo = configService.addConfig(dto.getName(), dto.getKey(), dto.getValue());
        return R.success(configInfo,"添加配置成功");
    }

    /**
     * 查询所有配置域
     * @return
     */
    @GetMapping("/getAllConfigName")
    public R<List<ConfigNameInfo>> getAllConfigName(){
        List<ConfigNameInfo> allConfigName = configService.getAllConfigName();
        return R.success(allConfigName,"查询所有配置域成功");
    }

    @PostMapping("/addName")
    public R addName(@Validated @RequestBody AddNameDTO dto){
        configService.addName(dto.getName(),dto.getDesc());
        return R.ok("添加配置域成功");
    }
}
